// pages/cart/index.js
/* 1、获取用户收货地址
    1 绑定点击事件
    2 调用小程序内置API 获取用户的收货地址 wx.chooseAddress(不实际)
    2 获取用户对小程序所授予获取地址的权限状态scope
      1 假设用户点击获取收货地址的提示框确定 authSetting scope.address scope值为TRUE
      2 假设用户从来没调用该收货地址的API scope值为undefine
      3 假设用户点击收货地址的提示框取消 authSetting scope.address scope值为FALSE
        1 诱导用户打开授权页面 重新获取权限
      4 把获取的收货地址存入缓存
  2 页面加载完毕
    1 获取本地存储中的地址数据
    2 吧素具设置给打他中的一个变量
  3 onshow
    1 获取缓存中的购物车数组
    2 把购物车数据填充到data中
  4 全选的实现
  5 总价格和总数量
  6 商品的选中功能
  7 全选 反选
  8 商品数量的编辑
  9 结算*/
import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncWX.js"
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },
  
  onShow(){
    // 获取缓存中的收货地址信息
    const address=wx.getStorageSync("address");
    // 获取缓存中的购物车数据
    const cart=wx.getStorageSync("cart")||[];
    this.setData({
      address
    })
    this.setCart(cart);
    
  },
  
  // 点击收货地址
  async handleChooseAddress(){  
    try {
        // 1 获取权限状态
        const res1=await getSetting();
        const scopeAddress=res1.authSetting["scope.address"];
        // 2 判断权限状态
        if(scopeAddress===false){
          // 3 先诱导用户打开授予页面
          await openSetting();
        }
          // 4 调用收货地址api
          let address = await chooseAddress();
          address.all=address.provinceName+address.cityName+address.countyName+address.detailInfo;
          // 5 存入缓存中
          wx.setStorageSync("address", address);
      }catch (error) {
      console.log(error);
    }
  },

  // 商品的选中
  handleItemChange(e){
    const goods_id=e.currentTarget.dataset.id;
    // console.log(goods_id);
    // 获取购物车数组
    let {cart} = this.data;
    // 找到修改的对象
    let index=cart.findIndex(v=>v.goods_id===goods_id);
    cart[index].checked=!cart[index].checked;
    // 把购物车数据重新设置回data和缓存中
    this.setCart(cart)
  },

  // 设置购物车状态同时 重新计算底部工具栏数据
  setCart(cart){
    let allChecked=true;
    // 总价格 总数量
    let totalPrice=0;
    let totalNum=0;
    cart.forEach(v=>{
      if(v.checked){
        totalPrice+=v.num*v.goods_price;
        totalNum+=v.num;
      }else{
        allChecked=false
      }
    })
    // 判断数组是否为空
    allChecked=cart.length!=0?allChecked:false;
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    });
    wx.setStorageSync("cart",cart);
  },

  // 商品全选功能
  handleItemAllCheck(){
    let{cart,allChecked}=this.data;
    allChecked=!allChecked;
    cart.forEach(v=>v.checked=allChecked);
    this.setCart(cart);
  },

  // 商品数量的编辑
  async handleItemNumEdit(e){
    const {operation,id}=e.currentTarget.dataset;
    // console.log(operation,id);
    let {cart} = this.data;
    const index=cart.findIndex(v=>v.goods_id===id);
    if(cart[index].num===1&&operation===-1){
      const res=await showModal({content:"是否确认删除？"});
      if (res.confirm) {
        cart.splice(index,1);
        this.setCart(cart);
      } else if (res.cancel) {
        console.log('用户点击取消')
      }
    }else{
      cart[index].num+=operation;
      this.setCart(cart);
    }  
  },
  // 点击结算
  async handlePay(){
    const {address,totalNum}=this.data;
    if(!address.userName){
      await showToast({title:'您还没添加收货地址'});
      return;
    }
    if(totalNum===0){
      await showToast({title:'您还没选购商品'});
      return;
    }
    wx.navigateTo({
      url: '/pages/pay/index'
    });
      
  }
})